import axios from 'axios';

// 创建axios实例，可配置基础的请求相关属性
const service = axios.create();

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        // 1. 可以添加通用的请求头，例如设置Content-Type
        config.headers['Content-Type'] = 'application/json;charset=UTF-8';

        // 2. 假设项目中有统一的鉴权需求，从store（Vuex）或本地存储获取token并添加到请求头
        const token = localStorage.getItem('token');
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }

        // 3. 如果有对请求参数进行特殊处理的需求（比如对GET请求参数序列化）
        if (config.method === 'get') {
            config.params = {
                ...config.params
            };
        }

        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    (response) => {
        const { data, status } = response;

        // 1. 根据业务规则判断请求是否成功，假设后端返回状态码200表示成功
        if (status === 200 || data.code === 200 || data.code === 500) {
            return data; // 返回真正的数据部分（可根据实际后端返回结构调整）
        } else {
            // 2. 如果请求失败，根据不同的错误码进行相应处理
            const errorMsg = data.message || '请求失败';
            switch (data.code) {
                case 401:
                    // 未授权情况，比如跳转到登录页面等处理
                    console.log('未授权，请登录');
                    break;
                case 403:
                    console.log('权限不足');
                    break;
                default:
                    console.log(errorMsg);
            }
            return Promise.reject(data);
        }
    },
    (error) => {
        // 3. 处理网络错误等情况，如请求超时、断网等
        if (axios.isCancel(error)) {
            console.log('请求已取消');
        } else {
            console.log('网络请求出错', error.message);
        }
        return Promise.reject(error);
    }
);

export default service;
